package org.visionlibrary.image.geomtric.lines.search.model;

import java.util.List;

import javax.media.jai.TiledImage;

import org.visionlibrary.image.event.IProcEventGenerator;
import org.visionlibrary.image.geomtric.model.Vector2d;


/**
 * Klasa abstrakcyjna po ktorej maja dziedziczyc wszystkie klasy odpowiedzialne
 * za wektoryzacje obrazu. Rozszerza ona klase pozwalajaca na wysylanie zdarzen
 * zwiazanych z praca algorytmu, jezeli taka funkcjonalnosc nie jest konieczna,
 * nalezy zaimplementowac sam interfejs bez rozszerzania tej klasy.
 * <br /><br />
 * Zawiera dwie dodatkowe metody find(TiledImage) oraz merge(List<Vector2d>).
 * Metoda find musi byc zaimplementowana przez wszystkie klasy pochodne, tam
 * powinien realizowany byc wlasciwy algorytm wektoryzacji.
 * Metoda merge nie musi byc implementowana, jest swoistym udogodnieniem i pozwala
 * na realizacje poprawiania uzsykanego zbioru linii w tej samej klasie. Jezeli
 * nie zostanie zaimplementowana zwroci liste podana jako parametr.
 */
public abstract class AbstractSegmentFinder extends IProcEventGenerator implements SegmentFinder {
    public List<Vector2d> search(TiledImage image) {
        return merge(find(image));
    }
    
    /**
     * Metoda ktora musi byc zaimplementowana przez klasy pochodne, ma za zadnie 
     * wyznaczyc list odcinkow (wektoryzowac) dla konturu obrazu podanego jako
     * argument.
     * 
     * @param image Obraz ktorego kontur ma byc przetworzony.
     * 
     * @return Lista odcinkow.
     */
    protected abstract List<Vector2d> find(TiledImage image);
    
    protected List<Vector2d> merge(List<Vector2d> list) {
        return list;
    }
}